<?php


namespace App\Http\Controllers\Admin;


use App\DTOS\Admin\EquipSendDTO;
use App\Http\Controllers\Controller;
use App\Models\Game\EquipSend;
use App\Models\Game\EquipSendItems;
use App\Services\Game\EquipSendService;
use App\Utils\ResponseUtil;
use Illuminate\Support\Facades\DB;

class EquipSendController extends Controller
{

    private EquipSendService $EquipSendService;

    /**
     * EquipSendController constructor.
     * @param EquipSendService $EquipSendService
     */
    public function __construct(EquipSendService $EquipSendService)
    {
        $this->EquipSendService = $EquipSendService;
    }

    public function paginate(){
        $DTO = new EquipSendDTO(request()->all());
        $pagination = $this->EquipSendService->paginate($DTO);
        $data = $pagination->items();
        foreach($data as &$datum){
            $datum['roleIdsStr'] = join(',',$datum['role_ids']);
            $datum['authStatusName'] = $this->getAuthStatusName($datum['auth_status']);
            $datum['sendStatusName'] = $this->getSendStatusName($datum['send_status']);
        }
        $res = [];
        $res['code'] = 0;
        $res['data'] = $data;
        $res['count'] = $pagination->total();
        return $res;
    }

    private function getAuthStatusName($value){
        switch($value){
            case -1: return "已拒绝";
            case 0: return "待审核";
            case 1: return "已通过";
        }
        return "";
    }

    private function getSendStatusName($value){
        switch($value){
            case -1: return "失败";
            case 0: return "待发送";
            case 1: return "成功";
        }
        return "";
    }

    public function add(){ //添加
        DB::beginTransaction();
        try {
            $roleIdsStr = request()->get('roleIdsStr');
            $roleIds = strArrToIntArr(explode(',',$roleIdsStr));
            $insert = [];
            $insert['title'] = request()->get('title');
            $insert['description'] = request()->get('description');
            $insert['game_area'] = request()->get('gameArea');
            $insert['role_ids'] = json_encode($roleIds);
            $insert['created_at'] = date("Y-m-d H:i:s");
            $id = EquipSend::query()->insertGetId($insert); //主表
            $inputEquipSendItems = request()->get('equipSendItems');
            if (empty($inputEquipSendItems)) {
                return ResponseUtil::error("物品为空");
            } else {
                $equipSendItems = [];
                foreach($inputEquipSendItems as $inputEquipSendItem) {

                    $equipId = data_get($inputEquipSendItem,'equipId');
                    $attribute = data_get($inputEquipSendItem,'attribute');
                    $ore = data_get($inputEquipSendItem,'ore');
                    $gem = data_get($inputEquipSendItem,'gem');
                    $soulAttr = data_get($inputEquipSendItem,'soulAttr');
                    $petAttr = data_get($inputEquipSendItem,'petAttr');
                    $fsbAttr = data_get($inputEquipSendItem,'fsbAttr');
                    $equipSendItems[] = [
                        'pid'=>$id,
                        'created_at'=>date("Y-m-d H:i:s"),
                        'equip_id'=>$equipId,
                        'equip_level'=>data_get($inputEquipSendItem,'equipLevel'),
                        'equip_bind'=>data_get($inputEquipSendItem,'equipBind'),
                        'hole_num'=>data_get($inputEquipSendItem,'holeNum'),
                        'send_num'=>data_get($inputEquipSendItem,'sendNum'),
                        'attribute'=>json_encode($attribute),
                        'ore'=>json_encode($ore),
                        'gem'=>json_encode($gem),
                        'soul_attr'=>json_encode($soulAttr),
                        'pet_attr'=>json_encode($petAttr),
                        'fsbAttr'=>json_encode($fsbAttr),
                    ];
                }
                EquipSendItems::query()->insert($equipSendItems);
            }
            DB::commit();
            return ResponseUtil::success();
        } catch(\Exception $e){
            DB::rollBack();
            return ResponseUtil::error($e->getMessage());
        }
    }

    public function detail($id){ //详情
        $detail = EquipSend::query()->with('sendItems')->find($id);
        return ResponseUtil::success($detail);
    }

    public function auth($id){ //通过审核
        DB::beginTransaction();
        try {
            $equipSend = EquipSend::query()->find($id);
            $this->EquipSendService->sendById($id);
            $equipSend->auth_status = 1;
            $equipSend->updated_at = date("Y-m-d H:i:s");
            $equipSend->auth_at = date("Y-m-d H:i:s");
            $equipSend->save();
            DB::commit();
        } catch(\Exception $e){
            DB::rollBack();
            return ResponseUtil::error($e->getMessage());
        }
        return ResponseUtil::success();
    }
    public function noauth($id){ //拒绝审核
        $find = EquipSend::query()->find($id);
        $find->updated_at = date("Y-m-d H:i:s");
        $find->auth_status = -1;
        $find->auth_at = date("Y-m-d H:i:s");
        $find->save();
        return ResponseUtil::success();
    }

}
